#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
简化的飞书长连接测试
"""

import os
from datetime import datetime
from dotenv import load_dotenv
import lark_oapi as lark
from src.step3_calender_event_details import get_calendar_event_details
from src.step4_calendars_update import update_calendar_event
from src.timestamp import TimestampManager
from src.token_manager import TokenManager  # 新增：引入TokenManager

# 加载环境变量
load_dotenv()

def start_timestamp_service():
    """测试长连接"""
    
    print("=== 飞书长连接测试 ===")
    
    # 检查环境变量
    app_id = os.getenv("FEISHU_APP_ID")
    app_secret = os.getenv("FEISHU_APP_SECRET")
    
    # 新增：使用TokenManager获取有效token
    token_manager = TokenManager()
    theUserAccessToken = token_manager.get_valid_token()
    
    if not app_id or not app_secret:
        print("[错误] 环境变量未配置")
        return False
    
    if not theUserAccessToken:
        print("[错误] 无法获取有效的用户访问令牌")
        print("[提示] 请检查.env文件或运行 'python src/step1_get_user_access_token.py' 获取新token")
        return False
    
    print(f"[配置] 应用ID: {app_id}")
    print(f"[配置] 用户令牌: {theUserAccessToken[:20]}...")
    
    # 创建事件处理器
    def handle_calendar_changed(data):
        pass
        #print("[事件] 收到日历变更", data)
        
    def handle_event_changed(data):
        # 新增：每次处理事件时获取最新的有效token
        current_token = token_manager.get_valid_token()
        if not current_token:
            print("[错误] 无法获取有效token，跳过事件处理")
            return
            

        if data.event.change_type == 'create':
            # 第一步：获取事件详情
            calender_id = data.event.calendar_id
            event_id = data.event.calendar_event_id
            
            event_details = get_calendar_event_details(
                calendar_id=calender_id,
                event_id=event_id,
                user_access_token=current_token,  # 使用最新token
                max_attendee_num=10,
                enable_debug_log=False
            )
            description = event_details.event.description
            event_title = event_details.event.summary
            print(f'[{datetime.now().strftime("%Y-%m-%d %H:%M:%S")}] [事件:日程创建]{event_title}')

            # 第二步：获得时间戳描述
            if TimestampManager.has_timestamp(description):
                print("[提示] 日程已存在时间戳，不进行添加")
                return description
            new_description = TimestampManager.add_timestamp_to_description(description)

            # 第三步：更新事件描述
            update_calendar_event(
                calendar_id=calender_id,
                event_id=event_id,
                user_access_token=current_token,  # 使用最新token
                description=new_description,
                enable_debug_log=False
            )

            return new_description

        # elif data.event.change_type == 'update':
        #     print("[事件] 收到日程变更", data.event.change_type)

        # elif data.event.change_type == 'delete':
        #     print('[事件] 收到日程删除', data.event.change_type)
    
    # 设置事件分发器
    try:
        event_handler = lark.EventDispatcherHandler.builder("", "") \
            .register_p2_calendar_calendar_changed_v4(handle_calendar_changed) \
            .register_p2_calendar_calendar_event_changed_v4(handle_event_changed) \
            .build()
        
        print("[成功] 事件分发器创建")
        
    except Exception as e:
        print(f"[失败] 事件分发器: {e}")
        return False
    
    # 创建长连接客户端
    try:
        ws_client = lark.ws.Client(
            app_id=app_id,
            app_secret=app_secret,
            event_handler=event_handler,
            log_level=lark.LogLevel.ERROR
        )
        
        print("[成功] WebSocket客户端创建")
        
    except Exception as e:
        print(f"[失败] WebSocket客户端: {e}")
        return False
    
    print("\n[启动] 开始建立长连接...")
    print("[提示] 看到 'connected to wss://' 表示成功")
    print("[提示] 按 Ctrl+C 停止")
    print("-" * 40)
    
    try:
        # 启动长连接
        ws_client.start()
        
    except KeyboardInterrupt:
        print("\n[停止] 用户中断")
        return True
        
    except Exception as e:
        print(f"\n[错误] 长连接失败: {e}")
        return False

if __name__ == "__main__":
    success = start_timestamp_service()
    
    print("\n=== 测试结果 ===")
    if success:
        print("[完成] 长连接测试")
    else:
        print("[失败] 请检查配置")